/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2010 huliqing, huliqing.cn@gmail.com
 *
 * This file is part of QFaces.
 * QFaces is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * QFaces is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with QFaces.  If not, see <http://www.gnu.org/licenses/>.
 *
 * 这个文件是QFaces的一部分。
 * 您可以单独使用或分发这个文件，但请不要移除这个头部声明信息.
 * QFaces是一个自由软件，您可以自由分发、修改其中的源代码或者重新发布它，
 * 新的任何修改后的重新发布版必须同样在遵守LGPL3或更后续的版本协议下发布.
 * 关于LGPL协议的细则请参考COPYING、COPYING.LESSER文件，
 * 您可以在QFaces的相关目录中获得LGPL协议的副本，
 * 如果没有找到，请连接到 http://www.gnu.org/licenses/ 查看并获取副本。
 *
 * - Author: Huliqing
 * - Contact: huliqing.cn@gmail.com
 * - License: GNU Lesser General Public License (LGPL)
 * - Blog and source code availability: http://www.huliqing.name/
 */

package name.huliqing.qfaces.test.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import name.huliqing.qfaces.model.MiniPageModel;
import name.huliqing.qfaces.model.MiniPageParam;
import name.huliqing.qfaces.model.PageModel;
import name.huliqing.qfaces.model.PageParam;
import name.huliqing.qfaces.test.dao.PersonDao;
import name.huliqing.qfaces.test.entity.Person;

public class PersonService {

    public final static PageModel<Person> findAllPersons(PageParam pp) {
        return PersonDao.getInstance().findAll(pp);
    }

    public final static MiniPageModel miniDataTable_findAllPersons(MiniPageParam mpp) {
        PageModel<Person> pm = findAllPersons(mpp);

        MiniPageModel mpm = new MiniPageModel();
        mpm.setTotal(pm.getTotal());
        List<Person> ps = pm.getPageData();
        if (ps != null && !ps.isEmpty()) {
            for (Person p : ps) {
                ArrayList<String> record = new ArrayList<String>();
                record.add(String.valueOf(p.getId()));
                record.add(p.getName());
                record.add(String.valueOf(p.getAge()));
                record.add(p.getEmail());
                record.add(formatDate(p.getBirthday()));
                mpm.addRecord(record);
            }
        }
        return mpm;
    }

    public final static Person findPerson(Long id) {
        return PersonDao.getInstance().find(id);
    }

    public final static void deletePerson(Person person) {
        PersonDao.getInstance().delete(person.getId());
    }

    public final static void updatePerson(Person person) {
        PersonDao.getInstance().update(person);
    }

    /**
     * 添加测试数据，最多122条，每次最多添加15条
     */
    public final static void addTestRecords() {
        Integer max = 122;
        Integer exist = PersonDao.getInstance().findAllTotal();
        if (exist >= max) {
            return;
        }
        Integer countAdd = max - exist;
        if (countAdd > 15) {
            countAdd = 15;
        }
        ArrayList<Person> persons = new ArrayList<Person>(countAdd);
        for (int i = 0; i < countAdd; i++) {
            Person p = new Person();
            p.setAge((int) (121 * Math.random()));
            p.setBirthday(new Date());
            p.setEmail(getRandomEmail());
            p.setName(getRandomName());
            persons.add(p);
        }
        PersonDao.getInstance().addPersons(persons);
    }

    /**
     * 产生一个随机名称
     * @return
     */
    private final static String getRandomName() {
        Integer len = 5 + (int) (4 * Math.random());
        char[] chars = new char[len];
        for (int i = 0; i < len; i++) {
            chars[i] = (char) (97 + (int) (26 * Math.random()));
        }
        return String.valueOf(chars);
    }

    /**
     * 产生一个随机的email
     * @return
     */
    private final static String getRandomEmail() {
        Integer lenPrefix = 5 + (int) (4 * Math.random());
        Integer lenSuffix = 1 + (int) (7 * Math.random());
        char[] charsPrefix = new char[lenPrefix];
        char[] charsSuffix = new char[lenSuffix];
        for (int i = 0; i < lenPrefix; i++) {
            charsPrefix[i] = (char) (97 + (int) (26 * Math.random()));
        }
        for (int i = 0; i < lenSuffix; i++) {
            charsSuffix[i] = (char) (97 + (int) (26 * Math.random()));
        }
        String result = String.valueOf(charsPrefix) + "@"
                + String.valueOf(charsSuffix) + ".com";
        return result;
    }

    private final static String formatDate(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(date);
    }
}
